#pragma once
/*--------------------------------------------------------------------------------
 * Adaptive Intelligence - Foundation Framework Class Library
 * Version 2.00
 * 
 * Byte Array Option Base Class
 *      Represents socket option(s) whose underlying data type is a byte array.
 *------------------------------------------------------------------------------*/

/*--------------------------------------------------------------------------------
 * System Imports
 *------------------------------------------------------------------------------*/
#include "stdafx.h"
#include "SocketOptionBase.h"

using namespace System;
using namespace System::Net;
using namespace System::Net::Sockets;
using namespace Adaptive;
using namespace Adaptive::Foundation;

namespace Adaptive
{
	namespace Network
	{
		namespace Sockets
		{
			/// <summary>
			/// Represents socket option(s) whose underlying data type is a byte array.
			/// </summary>
			public ref class ByteArraySocketOption : SocketOptionBase<array<Byte>^>
			{
			public:
				/*--------------------------------------------------------------------------------
				 * Constructor / Dispose / Destructor Methods
				 *------------------------------------------------------------------------------*/
				#pragma region Constructor / Dispose / Destructor Methods
				/// <summary>
				/// Initializes a new instance of the class.
				/// </summary>
				/// <param name="level">A <see cref="SocketOptionLevel"/> enumerated value indicating the option level.</param>
				/// <param name="name">A <see cref="SocketOptionName"/> enumerated value indicating the option name.</param>
				ByteArraySocketOption(SocketOptionLevel level, SocketOptionName name);
				/// <summary>
				/// Initializes a new instance of the class.
				/// </summary>
				/// <param name="level">A <see cref="SocketOptionLevel"/> enumerated value indicating the option level.</param>
				/// <param name="name">A <see cref="SocketOptionName"/> enumerated value indicating the option name.</param>
				/// <param name="value">The initial value for the socket option.</param>
				ByteArraySocketOption(SocketOptionLevel level, SocketOptionName name, array<Byte>^ value);
				#pragma endregion
			};
		}
	}
}
